package com.wwy.user.config;

import cn.dev33.satoken.stp.StpUtil;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

@Component
public class MybatisPlusMetaObjectHandler implements MetaObjectHandler {


    //在执行mybatisPlus的insert()时，为我们自动给某些字段填充值，这样的话，我们就不需要手动给insert()里的实体类赋值了
    @Override
    public void insertFill(MetaObject metaObject) {
        String userId = null;
        try {
            //系统内部定时任务或异步方法操作增删改时，因无法获取上下文登录信息，所以使用system代替
            userId = StpUtil.getLoginIdAsString();
        } catch (Exception e) {
            userId = "system";
        }

        // 创建人
        this.strictInsertFill(metaObject, "creator", String.class, userId);
        // 创建时间
        this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());

        // 操作人
        this.strictInsertFill(metaObject, "updater", String.class, userId);
        // 操作时间
        this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());

        // 逻辑删除
        this.strictInsertFill(metaObject, "deleted", Integer.class, 0);
    }


    //在执行mybatisPlus的update()时，为我们自动给某些字段填充值，这样的话，我们就不需要手动给update()里的实体类赋值了
    @Override
    public void updateFill(MetaObject metaObject) {
        String userId = null;
        try {
            //系统内部定时任务或异步方法操作增删改时，因无法获取上下文登录信息，所以使用system代替
            userId = StpUtil.getLoginIdAsString();
        } catch (Exception e) {
            userId = "system";
        }
        // 操作人
        this.strictUpdateFill(metaObject, "updater", String.class, userId);
        // 操作时间
        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
    }

}
